﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Control.conexion;

namespace Control.clases
{
    public class clsEquipo
    {
        private int idEquipo;
        private string equipoNombre;
        private string equipoIP;
        private string equipoMAC;
        private string equipoResponsable;
        private int equipoIS;
        private string equipoRuta;
        private string equipoObservacion;
        private string equipoFechaActualizacion;
        private string equipoLicencia;
        private string equipoCodInventario;
        private string equipoFechaCreacion;
        private int idUbicacion;
        private int idLugar;
        private int idTipo;
        private int idMarca;
        private int idDetalleEquipo;
        private string detalleDescripcion;
        private int detalleCantidad;
        private string detalleValor;
        private string detalleUnidad;
        private string detalleObservacion;
        private string detalleLicencia;
        private int detalleIdMarca;
        private int detalleIdEquipo;
        private int idCategoria;

        public clsEquipo(int _idEquipo)
        {
            this.idEquipo = _idEquipo;
            this.detalleValor = "-sin valor-";
            this.detalleUnidad = "-sin unidad-";
            this.detalleObservacion = "-sin observacion-";
            this.detalleLicencia = "-sin licencia-";
        }

        public clsEquipo()
        {
            this.idMarca = 1;
            this.idTipo = 1;
            this.equipoIS = 0;
            this.equipoRuta = "NO XML";
            this.equipoLicencia = "SIN LICENCIA";
            this.equipoMAC = "SIN MAC";
            this.equipoFechaCreacion = DateTime.Now.ToString("dd/MM/yyyy");
            this.equipoFechaActualizacion = DateTime.Now.ToString();
            this.equipoCodInventario = "SIN CODIGO";

            this.detalleLicencia = "SIN LICENCIA";
            this.detalleObservacion = "SIN OBSERVACIONES";
            this.detalleUnidad = "0";
            this.detalleValor = "0";
        }

        internal clsMarca clsMarca
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        internal clsTipoEquipo clsTipoEquipo
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        internal clsUbicacionLugar clsUbicacionLugar
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        internal clsCategoria clsCategoria
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        public int eliminarDetalleEquipo(int _IdDetalleEquipo)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("dbo.USP_D_ELIMINAR_TB_DETALLE_EQUIPO");
                oDataBase.AddParametro(cmd, "@id_detalle_equipo", _IdDetalleEquipo);
                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
                // return -1;
            }
        }

        public int eliminarEquipo(int _IdEquipo)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_D_ELIMINAR_TB_EQUIPO");
                oDataBase.AddParametro(cmd, "@id_equipo", _IdEquipo);
                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                return -1;
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public int actualizarEquipoMantenimiento(int _IdEquipo, string _equipoNombre, string _equipoIP, 
            string _equipoResponsable, string _equipoMAC, string _equipoCodInventario, int _IdMarca, int _IdTipo,
            int _equipoUbicacion, int _equipoLugar, string _equipoObservacion, string _equipoLicencia)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_U_ACTUALIZAR_TB_EQUIPO"); // insertar SP_INSERTAR

                // Ingresar parametros
                oDataBase.AddParametro(cmd, "@id_equipo", _IdEquipo);
                oDataBase.AddParametro(cmd, "@equipo_nombre_pc", _equipoNombre);
                oDataBase.AddParametro(cmd, "@equipo_direccion_ip", _equipoIP);
                oDataBase.AddParametro(cmd, "@equipo_responsable", _equipoResponsable);
                oDataBase.AddParametro(cmd, "@equipo_direccion_mac", _equipoMAC);
                oDataBase.AddParametro(cmd, "@equipo_xml_is", this.equipoIS);
                oDataBase.AddParametro(cmd, "@equipo_xml_ruta", this.equipoRuta);
                oDataBase.AddParametro(cmd, "@equipo_observacion", _equipoObservacion);
                oDataBase.AddParametro(cmd, "@equipo_actualizado", this.equipoFechaActualizacion);
                oDataBase.AddParametro(cmd, "@equipo_licencia", _equipoLicencia);
                oDataBase.AddParametro(cmd, "@equipo_codigo_inventario", _equipoCodInventario);
                oDataBase.AddParametro(cmd, "@tb_ubicacion_id_ubicacion", _equipoUbicacion);
                oDataBase.AddParametro(cmd, "@tb_lugar_id_lugar", _equipoLugar);
                oDataBase.AddParametro(cmd, "@tb_tipo_pc_id_tipo_pc", _IdTipo);
                oDataBase.AddParametro(cmd, "@tb_marca_id_marca", _IdMarca);

                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public int ingresarEquipoNuevo(string _equipoNombre, string _equipoIP, string _equipoResponsable,
            string _equipoMAC, string _equipoCodInventario, int _IdMarca, int _IdTipo,
            int _equipoUbicacion, int _equipoLugar, string _equipoObservacion, string _equipoLicencia)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_I_INSERTAR_TB_EQUIPO"); // insertar SP_INSERTAR

                // Ingresar parametros
                oDataBase.AddParametro(cmd, "@equipo_nombre_pc", _equipoNombre);
                oDataBase.AddParametro(cmd, "@equipo_direccion_ip", _equipoIP);
                oDataBase.AddParametro(cmd, "@equipo_responsable", _equipoResponsable);
                oDataBase.AddParametro(cmd, "@equipo_direccion_mac", _equipoMAC);
                oDataBase.AddParametro(cmd, "@equipo_xml_is", this.equipoIS);
                oDataBase.AddParametro(cmd, "@equipo_xml_ruta", this.equipoRuta);
                oDataBase.AddParametro(cmd, "@equipo_observacion", _equipoObservacion);
                oDataBase.AddParametro(cmd, "@equipo_actualizado", this.equipoFechaActualizacion);
                oDataBase.AddParametro(cmd, "@equipo_licencia", _equipoLicencia);
                oDataBase.AddParametro(cmd, "@equipo_codigo_inventario", _equipoCodInventario);
                oDataBase.AddParametro(cmd, "@equipo_fecha_creacion", this.equipoFechaCreacion);
                oDataBase.AddParametro(cmd, "@tb_ubicacion_id_ubicacion", _equipoUbicacion);
                oDataBase.AddParametro(cmd, "@tb_lugar_id_lugar", _equipoLugar);
                oDataBase.AddParametro(cmd, "@tb_tipo_pc_id_tipo_pc", _IdTipo);
                oDataBase.AddParametro(cmd, "@tb_marca_id_marca", _IdMarca);
                
                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public int ingresarDatosGenerales(string _equipoIP, string _equipoNombre, int _equipoUbicacion, 
            int _equipoLugar, string _equipoResponsable, string _equipoObservacion)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_I_INSERTAR_TB_EQUIPO"); // insertar SP_INSERTAR

                // Ingresar parametros
                oDataBase.AddParametro(cmd, "@equipo_nombre_pc", _equipoNombre);
                oDataBase.AddParametro(cmd, "@equipo_direccion_ip", _equipoIP);
                oDataBase.AddParametro(cmd, "@equipo_responsable", _equipoResponsable);
                oDataBase.AddParametro(cmd, "@equipo_direccion_mac", this.equipoMAC);
                oDataBase.AddParametro(cmd, "@equipo_xml_is", this.equipoIS);
                oDataBase.AddParametro(cmd, "@equipo_xml_ruta", this.equipoRuta);
                oDataBase.AddParametro(cmd, "@equipo_observacion", _equipoObservacion);
                oDataBase.AddParametro(cmd, "@equipo_actualizado", this.equipoFechaActualizacion);
                oDataBase.AddParametro(cmd, "@equipo_licencia", this.equipoLicencia);
                oDataBase.AddParametro(cmd, "@equipo_codigo_inventario", this.equipoCodInventario);
                oDataBase.AddParametro(cmd, "@equipo_fecha_creacion", this.equipoFechaCreacion);
                oDataBase.AddParametro(cmd, "@tb_ubicacion_id_ubicacion", _equipoUbicacion);
                oDataBase.AddParametro(cmd, "@tb_lugar_id_lugar", _equipoLugar);
                oDataBase.AddParametro(cmd, "@tb_tipo_pc_id_tipo_pc", this.idTipo);
                oDataBase.AddParametro(cmd, "@tb_marca_id_marca", this.idMarca);

                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public int ingresarDatosEspecificos(int _IdEquipo, string _equipoIP, string _equipoMAC, 
            string _equipoCodInventario, int _IdMarca, int _IdTipo)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_U_ACTUALIZAR_ESPECIFICOS_TB_EQUIPO"); // insertar SP_INSERTAR

                // Ingresar parametros
                oDataBase.AddParametro(cmd, "@id_equipo", _IdEquipo);
                oDataBase.AddParametro(cmd, "@equipo_direccion_ip", _equipoIP);
                oDataBase.AddParametro(cmd, "@equipo_direccion_mac", _equipoMAC);
                oDataBase.AddParametro(cmd, "@equipo_codigo_inventario", _equipoCodInventario);
                oDataBase.AddParametro(cmd, "@equipo_xml_is", this.equipoIS);
                oDataBase.AddParametro(cmd, "@equipo_xml_ruta", this.equipoRuta);
                oDataBase.AddParametro(cmd, "@equipo_actualizado", DateTime.Now.ToString());
                oDataBase.AddParametro(cmd, "@tb_marca_id_marca", _IdMarca);
                oDataBase.AddParametro(cmd, "@tb_tipo_pc_id_tipo_pc", _IdTipo);

                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public int ingresarDetalleEquipo(int _IdCategoria, string _detalleDescripcion, int _detalleIdMarca, 
            int _detalleCantidad)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_I_INSERTAR_TB_DETALLE_EQUIPO"); // insertar SP_INSERTAR

                // Ingresar parametros
                oDataBase.AddParametro(cmd, "@tb_categoria_id_categoria", _IdCategoria);
                oDataBase.AddParametro(cmd, "@detalle_equipo_descripcion", _detalleDescripcion);
                oDataBase.AddParametro(cmd, "@detalle_equipo_cantidad", _detalleCantidad);
                oDataBase.AddParametro(cmd, "@detalle_equipo_valor", this.detalleValor);
                oDataBase.AddParametro(cmd, "@detalle_equipo_unidad", this.detalleUnidad);
                oDataBase.AddParametro(cmd, "@detalle_equipo_observacion", this.detalleObservacion);
                oDataBase.AddParametro(cmd, "@detalle_equipo_licencia", this.detalleLicencia);
                oDataBase.AddParametro(cmd, "@tb_marca_id_marca", _detalleIdMarca);
                oDataBase.AddParametro(cmd, "@tb_equipo_id_equipo", this.idEquipo);


                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public System.Data.DataTable buscarEquipo(string _equipoIP)
        {
            clsConexion oDataBase = new clsConexion();
            DataTable dt = new DataTable();

            try
            {
                DbCommand cmd = oDataBase.CargarComandoSP("USP_S_BUSCAR_IP_TB_EQUIPO");
                oDataBase.AddParametro(cmd, "@equipo_direccion_ip", _equipoIP);
                dt = oDataBase.EjecutarConsulta(cmd);
                if (dt != null)
                {
                    return dt;
                }
                else
                {
                    return null;
                }

            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
                return null;
            }
        }

        // Modificar para que se pueda actualizar la licencia tambien desde el formulario de Default.aspx
        public int actualizarDatosEquipo(int _IdEquipo, string _equipoNombre, string _equipoIP, 
            string _equipoResponsable, string _equipoMAC, string _equipoCodInventario, int _IdMarca, int _IdTipo,
            int _equipoUbicacion, int _equipoLugar, string _equipoObservacion, string _equipoLicencia)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_U_ACTUALIZAR_TB_EQUIPO"); // insertar SP_INSERTAR

                // Ingresar parametros
                oDataBase.AddParametro(cmd, "@id_equipo", _IdEquipo);
                oDataBase.AddParametro(cmd, "@equipo_nombre_pc", _equipoNombre);
                oDataBase.AddParametro(cmd, "@equipo_direccion_ip", _equipoIP);
                oDataBase.AddParametro(cmd, "@equipo_responsable", _equipoResponsable);
                oDataBase.AddParametro(cmd, "@equipo_direccion_mac", _equipoMAC);
                oDataBase.AddParametro(cmd, "@equipo_xml_is", this.equipoIS);
                oDataBase.AddParametro(cmd, "@equipo_xml_ruta", this.equipoRuta);
                oDataBase.AddParametro(cmd, "@equipo_observacion", _equipoObservacion);
                oDataBase.AddParametro(cmd, "@equipo_actualizado", this.equipoFechaActualizacion);
                oDataBase.AddParametro(cmd, "@equipo_licencia", _equipoLicencia);
                oDataBase.AddParametro(cmd, "@equipo_codigo_inventario", _equipoCodInventario);
                oDataBase.AddParametro(cmd, "@tb_ubicacion_id_ubicacion", _equipoUbicacion);
                oDataBase.AddParametro(cmd, "@tb_lugar_id_lugar", _equipoLugar);
                oDataBase.AddParametro(cmd, "@tb_tipo_pc_id_tipo_pc", _IdTipo);
                oDataBase.AddParametro(cmd, "@tb_marca_id_marca", _IdMarca);

                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public DataTable listarDetalleEquipo()
        {
            clsConexion oDataBase = new clsConexion();
            DataTable dt = new DataTable();

            try
            {
                DbCommand cmd = oDataBase.CargarComandoSP("USP_S_LISTAR_2_DETALLE_EQUIPO");
                oDataBase.AddParametro(cmd, "@tb_equipo_id_equipo", this.idEquipo);
                dt = oDataBase.EjecutarConsulta(cmd);
                if (dt != null)
                {
                    return dt;
                }
                else
                {
                    return null;
                }

            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
                return null;
            }
        }

        public DataTable listarEquipoMantenimiento()
        {            
            clsConexion oDataBase = new clsConexion();
            DataTable dt = new DataTable();

            try
            {
                DbCommand cmd = oDataBase.CargarComandoSP("USP_S_LISTAR_TB_EQUIPO");
                // oDataBase.AddParametro(cmd, "@tb_equipo_id_equipo", this.idEquipo);
                dt = oDataBase.EjecutarConsulta(cmd);
                if (dt != null)
                {
                    return dt;
                }
                else
                {
                    return null;
                }

            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
                return null;
            }
        }

        public DataTable buscarEquipoMantenimiento(int _IdEquipo)
        {            
            clsConexion oDataBase = new clsConexion();
            DataTable dt = new DataTable();

            try
            {
                DbCommand cmd = oDataBase.CargarComandoSP("USP_S_BUSCAR_ID_TB_EQUIPO");
                oDataBase.AddParametro(cmd, "@id_equipo", _IdEquipo);
                dt = oDataBase.EjecutarConsulta(cmd);
                if (dt != null)
                {
                    return dt;
                }
                else
                {
                    return null;
                }

            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
                return null;
            }
        }

        public DataTable buscarDetalleEquipo(int _IdDetalleEquipo)
        {
            clsConexion oDataBase = new clsConexion();
            DataTable dt = new DataTable();

            try
            {
                DbCommand cmd = oDataBase.CargarComandoSP("USP_S_BUSCAR_ID_TB_DETALLE_EQUIPO");
                oDataBase.AddParametro(cmd, "@id_detalle_equipo", _IdDetalleEquipo);
                dt = oDataBase.EjecutarConsulta(cmd);
                if (dt != null)
                {
                    return dt;
                }
                else
                {
                    return null;
                }

            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
                return null;
            }
        }

        public int actualizarDetalleEquipo(int _IdDetalleEquipo, int _detalleCategoria, string _detalleDescripcion, 
            int _detalleMarca, int _detalleCantidad, int _IdEquipo)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_U_ACTUALIZAR_TB_DETALLE_EQUIPO"); // insertar SP_INSERTAR

                // Ingresar parametros
                oDataBase.AddParametro(cmd, "@id_detalle_equipo", _IdDetalleEquipo);
                oDataBase.AddParametro(cmd, "@tb_categoria_id_categoria", _detalleCategoria);
                oDataBase.AddParametro(cmd, "@detalle_equipo_descripcion", _detalleDescripcion);
                oDataBase.AddParametro(cmd, "@detalle_equipo_cantidad", _detalleCantidad);
                oDataBase.AddParametro(cmd, "@detalle_equipo_valor", this.detalleValor);
                oDataBase.AddParametro(cmd, "@detalle_equipo_unidad", this.detalleUnidad);
                oDataBase.AddParametro(cmd, "@detalle_equipo_observacion", this.detalleObservacion);
                oDataBase.AddParametro(cmd, "@detalle_equipo_licencia", this.detalleLicencia);
                oDataBase.AddParametro(cmd, "@tb_marca_id_marca", _detalleMarca);
                oDataBase.AddParametro(cmd, "@tb_equipo_id_equipo", _IdEquipo);


                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public string ConvertToHtmlFile(DataTable targetTable)
        {
            string myHtmlFile = "";
            int numeral = 1;

            if (targetTable == null)
            {
                throw new System.ArgumentNullException("targetTable");
            }
            else
            {
                //Continue.
            }


            //Get a worker object.
            StringBuilder myBuilder = new StringBuilder();          
            myBuilder.Append("<table class='striped bordered hovered'>");

            //Add the headings row.


            myBuilder.Append("<tr align='left' valign='top'>");

                myBuilder.Append("<td>");
                myBuilder.Append("#");
                myBuilder.Append("</td>");

                foreach (DataColumn myColumn in targetTable.Columns)
                {
                    myBuilder.Append("<td align='left' valign='top'>");
                    myBuilder.Append(myColumn.ColumnName);
                    myBuilder.Append("</td>");
                }

                myBuilder.Append("<td>");
                myBuilder.Append("Opciones");
                myBuilder.Append("</td>");

            myBuilder.Append("</tr>");


            //Add the data rows.
            foreach (DataRow myRow in targetTable.Rows)
            {
                myBuilder.Append("<tr align='left' valign='top'>");

                    myBuilder.Append("<td>");
                    myBuilder.Append(numeral.ToString());
                    myBuilder.Append("</td>");

                    foreach (DataColumn myColumn in targetTable.Columns)
                    {
                        myBuilder.Append("<td align='left' valign='top'>");
                        myBuilder.Append(myRow[myColumn.ColumnName].ToString());
                        myBuilder.Append("</td>");                    
                    }

                    myBuilder.Append("<td>");
                    myBuilder.Append("<a style='color:black;' id='OpenerHistorial' href='EditarDetalle.aspx?id=" + targetTable.Rows[numeral - 1]["ID"].ToString() + "'><i class='icon-pencil'></i></a> |");
                    myBuilder.Append("<a style='color:black;' id='OpenerHistorial' href='EliminarDetalle.aspx?id=" + targetTable.Rows[numeral - 1]["ID"].ToString() + "'><i id='editar' class='icon-cancel'></i></a>");
                    myBuilder.Append("</td>");

                myBuilder.Append("</tr>");
                numeral++;
            }


            //Close tags.
            myBuilder.Append("</table>");

            //Get the string for return.
            myHtmlFile = myBuilder.ToString();


            return myHtmlFile;
        }
    
    }
}
